//
// Created by Administrator on 2024/1/4.
//

#include <iostream>
#include "puntatoreNote.h"

void PuntatoreNull();

void puntatoreNoted() {
//    什么是指针
/*
指针是一个变量，其值为另一个变量的地址，即，内存位置的直接地址。就像其他变量或常量一样，您必须在使用指针存储其他变量地址之前，对其进行声明。指针变量声明的一般形式为：
 * */
/*type *var-name
 * type 是指针的基类型，它必须是一个有效的 C++ 数据类型，var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是，在这个语句中，星号是用来指定一个变量是指针。
 * 声明示例
 * */
    int *ip;
    double *dp;
    float *fp;
    char *ch;
//所有指针的值的实际数据类型，不管是整型、浮点型、字符型，还是其他的数据类型，都是一样的，都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是，指针所指向的变量或常量的数据类型不同。
//使用指针
    int var = 200;
    int *ips;
    ips = &var;
//访问指针代表的变量的地址
    std::cout << ips << "\n";
//访问指针代表的变量的值
    std::cout << *ips << "\n";
//空指针
    PuntatoreNull();
}
//空指针
void PuntatoreNull() {
//在变量声明的时候，如果没有确切的地址可以赋值，为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
int *p=NULL;
    std::cout << "p is a value:" << p<<"\n" ;//结果 p is a value:0
/*
 warning:
 On most operating systems, programs are not allowed to access memory at address 0 because this memory is reserved by the operating system. However, memory address 0 has special significance as it indicates that the pointer does not point to an accessible memory location. But by convention, if a pointer contains null (zero value), it is assumed to point to nothing.
 * */
}

